home *** CD-ROM | disk | FTP | other *** search
/ Aminet 24 / Aminet 24 (1998)(GTI - Schatztruhe)[!][Apr 1998].iso / Aminet / dev / c / AmiVoGL_MDEV.lha / examples / fviews.for < prev    next >
Text File  |  1991-06-03  |  4KB  |  185 lines

  1.  
  2. c
  3. c Shows various combinations of viewing and
  4. c projection transformations.
  5. c
  6.     program fviews
  7.  
  8. $INCLUDE: 'fvogl.h'
  9. $INCLUDE: 'fvodevic.h'
  10.  
  11.     integer *2 val, vminx, vmaxx, vminy, vmaxy
  12.  
  13.     call winope('fviews', 6)
  14. c
  15. c we are interested in keyboard events
  16. c
  17.     call unqdev(INPUTC)
  18.     call qdevic(KEYBD)
  19.  
  20.     call color(BLACK)
  21.     call clear
  22. c
  23. c open a hershey font
  24. c
  25.     call hfont('times.r', 7)
  26.  
  27. c
  28. c we want to draw just within the boundaries of the screen
  29. c
  30.         call getvie(vminx, vmaxx, vminy, vmaxy)
  31.     maxx = vmaxx
  32.     minx = vminx
  33.     maxy = vmaxy
  34.     miny = vminy
  35.         call viewpo(maxx / 10, maxx / 10 * 9, maxy / 10, maxy / 10 * 9)
  36.  
  37. c
  38. c set the world size
  39. c
  40.     call ortho2(-5.0, 5.0, -5.0, 5.0)
  41.  
  42. c
  43. c draw a boundary frame
  44. c
  45.     call color(RED)
  46.     call rect(-5.0, -5.0, 5.0, 5.0)
  47.  
  48. c
  49. c set up a perspective projection with a field of view of
  50. c 40.0 degrees, aspect ratio of 1.0, near clipping plane 0.1,
  51. c and the far clipping plane at 1000.0.
  52. c
  53.     call perspe(400, 1.0, 0.1, 1000.0)
  54. c
  55. c we want the drawing to be done with our eye point at (5.0, 8.0, 5.0)
  56. c looking towards (0.0, 0.0, 0.0). The last parameter gives a twist
  57. c in degrees around the line of sight, in this case zero.
  58. c
  59.     call lookat(5.0, 8.0, 5.0, 0.0, 0.0, 0.0, 0)
  60.  
  61.     call drawte
  62.  
  63. c
  64. c set the text size
  65. c
  66.     call htexts(0.6, 0.9)
  67.  
  68.     call move2(-4.5, -4.5)
  69.     call hchars('perspective/lookat', 18)
  70.  
  71.     idum = qread(val)
  72.  
  73. c
  74. c window can also be used to give a perspective projection. Its
  75. c arguments are 6 clipping planes, left, right, bottom, top, near,
  76. c and far.
  77. c
  78.     call window(-5.0, 5.0, -5.0, 5.0, -5.0, 5.0)
  79. c
  80. c as window replaces the current transformation matrix we must
  81. c specify our viewpoint again.
  82. c
  83.     call lookat(5.0, 8.0, 5.0, 0.0, 0.0, 0.0, 0)
  84.  
  85.     call color(BLACK)
  86.     call clear
  87.  
  88.     call color(GREEN)
  89.     call rect(-5.0, -5.0, 5.0, 5.0)
  90.  
  91.     call drawte
  92.  
  93.     call htexts(0.6, 0.9)
  94.     call move2(-4.5,-4.5)
  95.     call hchars('window/lookat', 13)
  96.  
  97.     idum = qread(val)
  98.  
  99. c
  100. c set up our original perspective projection again.
  101. c
  102.     call perspe(400, 1.0, 0.1, 1000.0)
  103. c
  104. c polarview also specifies our viewpoint, but, unlike lookat, in polar
  105. c coordinates. Its arguments are the distance from the world origin, an
  106. c azimuthal angle in the x-y plane measured from the y axis, an 
  107. c incidence angle in the y-z plane measured from the z axis, and a
  108. c twist around the line of sight.
  109. c
  110.     call polarv(15.0, 300, 300, 300)
  111.  
  112.     call color(BLACK)
  113.     call clear
  114.  
  115.     call color(MAGENT)
  116.     call rect(-5.0, -5.0, 5.0, 5.0)
  117.  
  118.     call drawte
  119.  
  120.     call move2(-4.5,-4.5)
  121.     call htexts(0.6, 0.9)
  122.     call hchars('perspective/polarview', 21)
  123.  
  124.     idum = qread(val)
  125.  
  126. c
  127. c once more with window for comparison
  128. c
  129.     call window(-4.0, 4.0, -4.0, 4.0, -4.0, 4.0)
  130.     call polarv(6.0, 2000, -3000, 7000)
  131.  
  132.     call color(BLACK)
  133.     call clear
  134.  
  135.     call color(YELLOW)
  136.     call rect(-5.0, -5.0, 5.0, 5.0)
  137.  
  138.     call drawte
  139.  
  140.     call move2(-4.5,-4.5)
  141.     call htexts(0.6, 0.9)
  142.     call hchars('window/polarview', 16)
  143.  
  144.     idum = qread(val)
  145.  
  146.     call gexit
  147.     
  148.     end
  149.  
  150. c
  151. c drawtetra 
  152. c generate a tetrahedron as a series of move draws 
  153. c
  154. c
  155.     subroutine drawte
  156.     
  157.     integer WHITE
  158.     parameter (WHITE = 7)
  159.  
  160.     call move(-0.5,  0.866, -0.5)
  161.     call draw(-0.5, -0.866, -0.5)
  162.     call draw( 1.0,  0.0,   -0.5)
  163.     call draw(-0.5,  0.866, -0.5)
  164.     call draw( 0.0,  0.0,    1.5)
  165.     call draw(-0.5, -0.866, -0.5)
  166.     call move( 1.0,  0.0,   -0.5)
  167.     call draw( 0.0,  0.0,    1.5)
  168.     
  169. c    Label the vertices.
  170. c
  171.     call color(WHITE)
  172.     call htexts(0.3, 0.5)    
  173.     call move(-0.5,  0.866, -0.5)
  174.     call hdrawc('a')
  175.     call move(-0.5, -0.866, -0.5)
  176.     call hdrawc('b')
  177.     call move( 1.0,  0.0,   -0.5)
  178.     call hdrawc('c')
  179.     call move( 0.0,  0.0,    1.5)
  180.     call hdrawc('d')
  181.  
  182.     end
  183.